(轉自Wiki)
YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞迴縮寫。
在開發的這種語言時,YAML的意思其實是:"Yet Another Markup Language"(仍是一種標記語言),但為了強調這種語言以資料為中心,而不是以標記語言為重點,而用反向縮略語重新命名。
所以到底是不是(頭好痛)
YAML 的基本特點
字串: 'This is an apple'
數字: 42
布林值: true
空值: null
version: '3'
services:
web:
image: nginx:latest
ports:
- "80:80"
restart: always
水果:
- 蘋果
- 香蕉
- 橘子
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
- ./mysql-init-files:/docker-entrypoint-initdb.d
使用者:
名字: 小明
年齡: 25
興趣:
- 閱讀 # 這裡是list
- 游泳 # 這裡是list
services:
web:
environment:
NODE_ENV: production
DB_HOST: db
DB_PORT: 3306
錨點和別名用於重複使用相同的資料,甚可以類似function一樣,先寫好,後面重複使用。
優點
&
符號定義,用來標記一個值或一組值。*
符號引用,用來重複使用已經定義的錨點。# 定義錨點
基本設定: &基本
版本: 1.0
語言: 繁體中文
# 使用別名
使用者設定:
<<: *基本 # 合併基本設定
使用者名稱: 小明
x-base-service: &base-service #定義名為 base-service 的錨點
restart: always
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
services:
web:
<<: *base-service #使用名為 base-service 的錨點
image: nginx:latest
ports:
- "80:80"
api:
<<: *base-service #使用名為 base-service 的錨點
image: node:14
command: npm start
部分覆蓋:
開發環境: &開發
資料庫: MySQL
快取: Redis
除錯模式: 開啟
測試環境:
<<: *開發 # 繼承開發環境設定
除錯模式: 關閉 # 覆蓋特定設定
x-app-volume: &app-volume
type: volume
source: myapp
target: /app
services:
web:
image: nginx:latest
volumes:
- <<: *app-volume
read_only: true
api:
image: node:14
volumes:
- <<: *app-volume
read_only: false
多重繼承:
資料庫設定: &資料庫
類型: PostgreSQL
端口: 5432
日誌設定: &日誌
級別: 資訊
格式: JSON
應用程式:
<<: [*資料庫, *日誌] # 合併多個設定
名稱: 我的應用
x-logging: &logging
logging:
driver: json-file
options:
max-size: "10m"
x-healthcheck: &healthcheck
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 1m30s
timeout: 10s
retries: 3
services:
web:
<<: [*logging, *healthcheck]
image: nginx:latest
YAML 提供了幾種處理多行字串的方式,每種方式對換行的處理都不同:
使用 |
可以保留文字塊中的換行:
描述: |
這是一個
多行字串。
每一行都會保留。
services:
app:
image: myapp:latest
command: |
echo 'Starting application...'
npm install
npm start
這會保留每一行的換行。
使用 >
可以將換行轉換為空格:
摘要: >
這也是一個多行字串。
但是換行會被轉換為空格。
除非有空行分隔。
services:
app:
image: myapp:latest
environment: >
NODE_ENV=production
DB_HOST=db
DB_PORT=3306
這會將多行合併為一行,換行符會被轉換為空格。
使用 |-
可以保留換行,但去除末尾的換行:
services:
app:
image: myapp:latest
command: |-
echo 'Starting application...'
npm install
npm start
這會保留換行,但不包括最後一行之後的換行。
YAML 通常被視為 JSON 的超集,提供更多功能和更好的可讀性。